//时间格式化
Date.prototype.format = function (mask) {
    var d = this;
    var zeroize = function (value, length)
    {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++)
        {
            zeros += '0';
        }
        return zeros + value;
    };
 
    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
        switch ($0) {
            case 'd': return d.getDate();
            case 'dd': return zeroize(d.getDate());
            case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
            case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
            case 'M': return d.getMonth() + 1;
            case 'MM': return zeroize(d.getMonth() + 1);
            case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
            case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
            case 'yy': return String(d.getFullYear()).substr(2);
            case 'yyyy': return d.getFullYear();
            case 'h': return d.getHours() % 12 || 12;
            case 'hh': return zeroize(d.getHours() % 24 || 0);
            case 'H': return d.getHours();
            case 'HH': return zeroize(d.getHours());
            case 'm': return d.getMinutes();
            case 'mm': return zeroize(d.getMinutes());
            case 's': return d.getSeconds();
            case 'ss': return zeroize(d.getSeconds());
            case 'l': return zeroize(d.getMilliseconds(), 3);
            case 'L': var m = d.getMilliseconds();
                if (m > 99) m = Math.round(m / 10);
                return zeroize(m);
            case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
            case 'Z': return d.toUTCString().match(/[A-Z]+$/);
            // Return quoted strings with the surrounding quotes removed
            default: return $0.substr(1, $0.length - 2);
        }
    });
};

/**
 * 添加页面选项卡面板
 * @param title 面板标题
 * @param url 链接地址
 * @param iconCls 图标样式
 * @param iframe 链接跳转方式(true为iframe，false为href)
 * @param menu 是否为导航菜单选项卡(true为导航菜单选项卡, false为其它页面跳转)
 * @returns
 */

function addTab(title, url, iconCls, iframe, menu){
	var tabPanel = $('#tabs');
	var content = '<iframe scrolling="auto" frameborder="0"  src="'+ url +'" style="width:100%;height:100%;"></iframe>';
	if(!tabPanel.tabs('exists',title)){
		if(iframe){
			tabPanel.tabs('add',{
				title:title,
				content:content,
				iconCls:iconCls,
				fit:true,
				cls:'pd3',
				closable:true
			});
		} else {
			tabPanel.tabs('add',{
				title:title,
				href:url,
				iconCls:iconCls,
				fit:true,
				cls:'pd3',
				closable:true
			});
		}
	} else {
		if(menu) {  // 点击菜单选项卡时不刷新内容
			tabPanel.tabs("select",title);
		} else {
			tabPanel.tabs("select",title);  // 如果面板已存在则选中该面板
			var tab = tabPanel.tabs('getSelected');  // 获取选择的面板
			tab.panel('refresh', url);  // 刷新面板来装载远程数据, 如果'url'属性有了新配置，它将重写旧的'url'属性
		}
	}
}

/**
 * 正表达式-纯数字验证
 * @param number
 * @returns {Boolean}
 */
function regNumber(number){
	var reg2 = /^[0-9]*$/;  //数字
	//var reg2 = '^(?:[1-9]\d|100)$';  //数字
	if(number.match(reg2) ==null){
		return false;
	}else{
		return true;
	}
}

/**
 * 正表达式-数字和字母验证
 * @param str
 * @returns {Boolean}
 */
function regNumAndLetter(str){
	var reg = /^[A-Za-z0-9]+$/; //数字和字母
	if(str.match(reg) ==null){
		return false;
	}else{
		return true;
	}
}

//验证字符串是否包含特殊字符
function CheckStr(str){
    var SpecialCharacters = "[@!~/'\"#$%&^*()_-]+";
    var reg = new RegExp(SpecialCharacters);
    if(reg.test(str)){
        return false;
    }
    return true;
}

// 程序错误提示
function errorPromt(XMLHttpRequest, textStatus, errorThrown) {
	if ("parsererror" == textStatus) {
		if (XMLHttpRequest.responseText != "") {
			$.messager.alert("信息", "数据解析错误！", "info");
			$('#index_prompt').dialog('close');
		}
	} else {
		$.messager.alert("信息", "后台程序出错了！", "info");
		$('#index_prompt').dialog('close');
	}
}

/**
 * 判断combobox输入值是否为下拉菜单中的值；
 * 如果return -1,则表示输入的内容不存在下拉菜单中存在；
 * 如果return 0，则表示输入的内容存在于下拉菜单中。
 * @param text
 * @param array[]
 * @returns {Number}
 */
function containsCombo(text,array){
	var object =[];
	var record = -1;
	for (var j = 0; j < array.length; j++) {
		if(array[j].ftypename){ //用户类型
			object.push(array[j].ftypename);
		}else if(array[j].fname){ //用户组
			object.push(array[j].fname);
		}else if(array[j].fksname){ //默认科室
			object.push(array[j].fksname);
		}
	}
	for (var i = 0; i < object.length; i++) {
		if( text.indexOf(object[i]) > -1){
			record = 0;
			object.length = 0;
			break;
		}
	}
	return record;
}

function regPhone(phone){
	var reg = /^1[34578]\d{9}$/; //电话
	if(phone.match(reg) ==null){
		return false;
	}else{
		return true;
	}
}

/**
 * 正表达式-文字验证
 * @param str
 * @returns {Boolean}
 */
function regWord(str){
	var reg = /^[\u4e00-\u9fa5]+$/; //纯中文
	if(str.match(reg) ==null){
		return false;
	}else{
		return true;
	}
}

/**
 * 正表达式-纯数字验证
 * @param number
 * @returns {Boolean}
 */
function regNumber(number){
	var reg2 = /^[0-9]*$/;  //数字
	if(number.match(reg2) ==null){
		return false;
	}else{
		return true;
	}
}

/**
 * 正表达式-数字和字母验证
 * @param str
 * @returns {Boolean}
 */
function regNumAndLetter(str){
	var reg = /^[A-Za-z0-9]+$/; //数字和字母
	if(str.match(reg) ==null){
		return false;
	}else{
		return true;
	}
}


/**
 * 正表达式-地址验证
 * @param str
 * @returns {Boolean}
 */
function regAddress(str){
	var reg = /^(?=.*?[\u4E00-\u9FA5])[\dA-Za-z\u4E00-\u9FA5]+/; //地址
	if(str.match(reg) ==null){
		return false;
	}else{
		return true;
	}
}
 
//身份证号合法性验证 
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
   function regIDCard(code) { 
       var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",
    		   35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南"
    			   ,54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
       var tip = "";
       var pass= true;
       
       if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
           tip = "身份证号格式错误";
           pass = false;
       }
       
      else if(!city[code.substr(0,2)]){
           tip = "地址编码错误";
           pass = false;
       }
       else{
           //18位身份证需要验证最后一位校验位
           if(code.length == 18){
               code = code.split('');
               //∑(ai×Wi)(mod 11)
               //加权因子
               var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
               //校验位
               var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
               var sum = 0;
               var ai = 0;
               var wi = 0;
               for (var i = 0; i < 17; i++)
               {
                   ai = code[i];
                   wi = factor[i];
                   sum += ai * wi;
               }
               var last = parity[sum % 11];
               if(parity[sum % 11] != code[17]){
                   tip = "校验位错误";
                   pass =false;
               }
           }
       }
       if(!pass) alert(tip);
       return pass;
   }

//判断ip地址正则表达式
function IsIpAddress(str){
	 var reg =  /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
	if(reg.test(str)){
		return true;
	}else{
		return false;
	}
}

//给日期类对象添加日期差方法，返回日期与diff参数日期的时间差，单位为天
Date.prototype.diff = function(date){
  return (this.getTime() - date.getTime())/(24 * 60 * 60 * 1000);
}

//鼠标滚动_图片放大效果
function RSviewer(srcPath){  
	 var $PA = jQuery; 
     var iviewer = {};
     $PA("#ShootViewer").iviewer({
	      src:srcPath,
	      initCallback: function()
	      { 
	        iviewer = this;
	      } 
     }); 
} 
//鼠标滚动_图片放大效果2
function slider_RSviewer(i,srcPath){ 
	 var $PA = jQuery; 
     var iviewer = {};
     $PA("#viewer"+i).iviewer({
    	  src:srcPath,
          initCallback: function()
          { 
            iviewer = this;
          } 
      }); 
}

//把双字节的替换成两个单字节的然后再获得长度 
function getBLen(str) {
	if (str == null) return 0;
	if (typeof str != "string"){
		str += "";
	}
	return str.replace(/[^\x00-\xff]/g,"01").length;
}

/*
 *　方法:Array.remove(dx)
 *　功能:删除数组元素.
 *　参数:dx删除元素的下标.
 *　返回:在原数组上修改数组
*/
//经常用的是通过遍历,重构数组.
Array.prototype.remove=function(dx)
{
	if(isNaN(dx)||dx>this.length){return false;}
	for(var i=0,n=0;i<this.length;i++)
	{
	if(this[i]!=this[dx])
	{
	this[n++]=this[i]
	}
	}
	this.length-=1
}
